package com.example.demo.common.utils;

import com.example.demo.common.cache.CacheFunc;
import com.example.demo.common.cache.CacheUser;

import javax.servlet.http.HttpSession;
import java.util.*;

/**
 * 权限工具类
 */
public class FuncUtils {

    /**
     * 稳定与安全管控编码
     */
    public static final String STABLE = "stable";

    /**
     * 环境监测编码
     */
    public static final String ENVIRONMENT = "environment";
    /**
     * 预警与告警编码
     */
    public static final String ALARM = "alarm";
    /**
     * 园区运营监管编码
     */
    public static final String OPERATE = "operate";
    /**
     * 设备和通信服务编码
     */
    public static final String COMMUNICAT = "communication";

    /**
     * 系统配置编码
     */
    public static final String CONFIG = "config";

    /**
     * 根据权限编码获取当前用户当前访问权限及下一级权限列表
     * @param session 会话信息
     * @param code 当前访问权限编码
     * @return 当前权限信息以及下级权限列表
     */
    public static Map<String, Object> getSessionFuncs(HttpSession session, String code) {
        Map<String, Object> map = new HashMap<>();
        if(session != null && session.getAttribute("user") != null) {
            CacheUser user = (CacheUser)session.getAttribute("user");
            List<CacheFunc> funcList = user.getFunc();
            if(!ToolsUtil.isEmpty(funcList)) {
                CacheFunc func = null;
                List<CacheFunc> child = new ArrayList<CacheFunc>();
                for(CacheFunc f : funcList) {
                    if(f.getCode().equals(code)) {
                        func = f;
                    }
                    if(f.getPcode().equals(code)) {
                        child.add(f);
                    }
                }
                if(!ToolsUtil.isEmpty(child)) {
                    // 排序
                    child.sort(new Comparator<CacheFunc>() {
                        @Override
                        public int compare(CacheFunc o1, CacheFunc o2) {
                            if(o1.getSort() != null && o2.getSort() != null) {
                                return o1.getSort() - o2.getSort();
                            }
                            return 0;
                        }
                    });
                }
                map.put("func", func);
                map.put("funcs", child);
            }
        }
        return map;
    }

}
